import subprocess
import sys
import os
import shutil

def build_exe():

    # 构建exe文件，运行此文件

    try:
        print("开始打包...")
        
        # 获取项目根目录的绝对路径
        project_root = os.path.dirname(os.path.abspath(__file__))
        
        # 清理之前的构建文件
        build_dir = os.path.join(project_root, 'build')
        dist_dir = os.path.join(project_root, 'dist')
        
        if os.path.exists(build_dir):
            shutil.rmtree(build_dir)
        if os.path.exists(dist_dir):
            shutil.rmtree(dist_dir)
            
        # 使用 PyInstaller 打包
        main_path = os.path.join(project_root, 'src', 'main.py')
        src_path = os.path.join(project_root, 'src')
        
        subprocess.check_call([
            sys.executable,
            '-m',
            'PyInstaller',
            '--name=ImageSplitter',
            '--windowed',
            '--noconsole',
            '--onedir',
            f'--add-data={src_path};src',
            '--hidden-import=cv2',
            '--hidden-import=numpy',
            '--hidden-import=rembg',
            '--hidden-import=rembg.session_factory',
            '--hidden-import=rembg.sessions',
            '--hidden-import=PIL',
            '--hidden-import=PIL.Image',
            '--hidden-import=PIL.ImageEnhance',
            '--collect-all=cv2',
            '--collect-all=numpy',
            '--collect-all=rembg',
            '--clean',
            '--paths', src_path,
            main_path
        ])
        
        print("打包完成！程序位于 dist/ImageSplitter 目录")
        
    except subprocess.CalledProcessError as e:
        print(f'打包失败: {str(e)}')
        print(f'返回码: {e.returncode}')
        print(f'命令输出: {e.output if hasattr(e, "output") else "无输出"}')
        sys.exit(1)
    except Exception as e:
        print(f'发生错误: {str(e)}')
        sys.exit(1)

if __name__ == '__main__':
    build_exe() 